/*
 * @lc app=leetcode.cn id=78 lang=javascript
 *
 * [78] 子集
 */
// @lc code=start
/**
 * @param {number[]} nums
 * @return {number[][]}
 */
 var subsets = function(nums) {
  const res = []
  let list = []
  const dfs = (index) => {
    res.push(list.slice())
    for (let i = index; i < nums.length; i++) {
      list.push(nums[i])
      dfs(i + 1)
      // 不选，剩下的深度优先遍历
      list.pop()
    }
  }
  dfs(0)
  return res
};
// @lc code=end

// var subsets = function(nums) {
//   const res = []
//   const dfs = (index, list) => {
//     // 到头了，回溯
//     if (index == nums.length) {
//       return res.push(list.slice())
//     }
//     // 选，然后深度优先遍历
//     list.push(nums[index])
//     dfs(index + 1, list)
//     // 不选，剩下的深度优先遍历
//     list.pop()
//     dfs(index + 1, list)
//   }
//   dfs(0, [])
//   return res
// };